"""
设计模式：
1.单例模式
2.工厂模式
"""

"""
单例模式：
    保证1个类只有一个实例，并且提供一个访问它的全局访问点
优点：节省内存，节省创建对象的开销；
    如下代码：StrTools类，每创建一个对象t1,t2就会占内存消耗资源；
场景：配置管理（整个系统只需要一份）；日志记录器；数据库连接池（维护一个全局的数据库连接池，避免频繁的创建和销毁连接）；硬件设备访问（打印机，扫描仪等只能1个连接）
使用：
    1.ceshi04.py 中定义类对象 tool_quanju_duixiang
    2.ceshi05.py 中导入类对象 tool_quanju_duixiang；此时再定义的对象都是同一个
    
"""
# 如下代码：StrTools类，每创建一个对象t1,t2就会占内存消耗资源；
class StrTools():
 pass

t1 = StrTools()  #<__main__.StrTools object at 0x0000029460CFCD30>
t2 = StrTools()  #<__main__.StrTools object at 0x0000029460CFCDA0>

# **单例模式：
#1.ceshi04.py 中定义类对象 tool_quanju_duixiang
class StrTools():
 pass

tool_quanju_duixiang = StrTools()

#2.ceshi05.py 中导入类对象 tool_quanju_duixiang，此时再定义的对象都是同一个；

# from test_jichu0410.ceshi04 import tool_quanju_duixiang
# t1 = tool_quanju_duixiang  #<test_jichu0410.ceshi04.StrTools object at 0x0000028B53460630>
# t2 = tool_quanju_duixiang  #<test_jichu0410.ceshi04.StrTools object at 0x0000028B53460630>

"""
2. 工厂模式：创建对象统一入口，统一处理，易于代码维护；
"""

class Person:
 print("Person")

class Worker(Person):
 print("Worker")

class Student(Person):
 print("Student")

class Teacher(Person):
 print("Teacher")

class Factory:
 def get_duixiang(self,p_type):
  if p_type == "w":
   return Worker()
  elif p_type =="s":
   return Student()
  else:
   return Teacher()

"""
创建对象旧方式：
duixiang1 = Worker()
duixiang2 = Student()
duixiang3 = Teacher()
"""

# 创建对象统一入口，统一处理
duixiang_new = Factory()
duixiang1 = duixiang_new.get_duixiang('w')
duixiang2 = duixiang_new.get_duixiang('s')
duixiang3 = duixiang_new.get_duixiang('t')


